<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>匿名函数和闭包</title>
	</head>
	<body>
	</body>
	<script>
		//循环里的匿名函数的取值问题
		function box(){
			var arr=[];
			for (var i=0;i<5;i++) {
				arr[i]=function(){
					return i;
				};
			}
			//循环已经执行完毕，i最终是4  i++=5  那 么最终就是5
			return arr;
		}
		 alert(box()[0]);
		 var b = box();
		 alert(b.length);
		 
		 for (var i=0;i<5;i++) {
		 	alert(b[i]());  //全是 55555
		 }
		
		
		//修改  1
		 function boxsum(){
		 	var arr=[];
		 	for (var i=0;i<5;i++) {
		 		arr[i] =i;
		 	}
		 	return arr;
		 }
		 
		 var bs =boxsum();
		 alert(bs);//0,1,2,3,4
		 for (var i=0;i<5;i++) {
		 	alert(bs[i]);  //0,1,2,3,4
		 }
		 alert("分隔")
		 //修改成匿名函数
		 	 function boxn(){
		 	var arr=[];
		 	for (var i=0;i<5;i++) {
		 		arr[i] =(function(num){//通过闭包自我及时执行匿名函数
		 			return num;
		 		})(i);
		 	}
		 	return arr;
		 }
		 
		 var bn =boxn();
		 alert(bn);//0,1,2,3,4
		 for (var i=0;i<5;i++) {
		 	alert(bn[i]);  //0,1,2,3,4
		 }
		 
		 alert('修改2')
		 //修改2
		 
		  	 function boxn2(){
		 	var arr=[];
		 	for (var i=0;i<5;i++) {  
		 			
		 		arr[i] =(function(num){//因为闭包可以将变量驻留在内存中
		 			//num在这
		 			return function(){
		 				return num;
		 			};
		 		})(i);
		 	}
		 	return arr;
		 }
		 
		 var bn2 =boxn2();
		 for (var i=0;i<5;i++) {
		 	alert(bn2[i]());  //0,1,2,3,4
		 }
		 alert('修改3')
		 
		 //修改3
		  	 function boxn3(){
		 	var arr=[];
		 	for (var i=0;i<5;i++) {  
		 			//此处匿名函数赋给变量可以不加括号
		 		arr[i] =function(num){//因为闭包可以将变量驻留在内存中
		 			//num在这
		 			return function(){
		 				return num;
		 			};
		 		}(i);
		 	}
		 	return arr;
		 }
		 
		 var bn3 =boxn3();
		 for (var i=0;i<5;i++) {
		 	alert(bn3[i]());  //0,1,2,3,4
		 }
		 
		 
	</script>
</html>
